java后台将html转换为图片

您所在的位置:网站首页 html转图片 java java后台将html转换为图片

java后台将html转换为图片

2024-01-10 08:13| 来源: 网络整理| 查看: 265

方法一:利用springboot的freemark生成 要考虑样式兼容问题 1.pom引入对应的包

org.springframework.boot spring-boot-starter-freemarker com.openhtmltopdf openhtmltopdf-core 0.0.1-RC9 mvnrepository mvnrepository https://mvnrepository.com

2.对应的模板 后缀名.ft 文件

DOCTYPE html> 海报 ${msg} 大幅度发

3.工具类

public class FreemarkerUtils { private static String getTemplate(String template, Map map) throws IOException, TemplateException { Configuration cfg = new Configuration(Configuration.VERSION_2_3_25); String templatePath = FreemarkerUtils.class.getResource("/").getPath()+"/templates"; cfg.setDirectoryForTemplateLoading(new File(templatePath)); cfg.setDefaultEncoding("UTF-8"); cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER); cfg.setLogTemplateExceptions(false); Template temp = cfg.getTemplate(template); StringWriter stringWriter = new StringWriter(); temp.process(map, stringWriter); stringWriter.flush(); stringWriter.close(); String resutl = stringWriter.getBuffer().toString(); return resutl; } public static void turnImage(String template, Map map, HttpServletResponse response) throws Exception { String html = getTemplate(template, map); byte[] bytes=html.getBytes(); ByteArrayInputStream bin=new ByteArrayInputStream(bytes); DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=factory.newDocumentBuilder(); Document document=builder.parse(bin); Java2DRenderer renderer = new Java2DRenderer(document,600,800); BufferedImage img = renderer.getImage(); response.setContentType("image/jpeg"); response.setDateHeader("expries", -1); response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); //输出在页面 // ImageIO.write(img, "jpg", response.getOutputStream()); //指定下载路径 File file=new File("D:\\zhifu\\测试.jpg"); try { ImageIO.write(img, "jpg", file); }catch (Exception e){ e.printStackTrace(); } } }

测试方法

public void test(HttpServletResponse response) { try { Map map=new HashMap(16); map.put("msg","html--生成图片测试22222"); map.put("img","https://upload-images.jianshu.io/upload_images/912344-3054132dd6939004.png?imageMogr2/auto-orient/strip|imageView2/1/w/300/h/240"); FreemarkerUtils.turnImage("demo.ftl",map,response); } catch (Exception e) { e.printStackTrace(); } }

第二种 将页面代码生成html在进行转化

public class PictureHtml { public static void main(final String[] args) throws Exception { //html页面中需要灵活变动的值 String headurl = "";//图片的路径不能是带有参数的 不然解析不了 String proUrl = ""; String qrCodeUrl = ""; String proName="犀牛皮特质皮鞋"; String proPrice="1000.00"; String userName="测试"; String html = "\n" + "\n" + "\n" + " \n" + " \n" + " 分享\n" + " \n" + " body {\n" + " font-size: 0;\n" + " padding: 0;\n" + " margin: 0;\n" + " }\n" + "\n" + " div {\n" + " box-sizing: border-box;\n" + " }\n" + "\n" + " .main {\n" + " width: 654px;\n" + " margin: 0 auto;\n" + " padding: 28px;\n" + " text-align: center;\n" + " background: green;\n" + " }\n" + "\n" + " .top{\n" + " display: inline-block;\n" + " max-width: 100%;\n" + " margin: 0 auto 20px;\n" + " position: relative;\n" + " padding-left: 56px;\n" + " font-size: 28px;\n" + " line-height: 48px;\n" + " color: #666;\n" + " }\n" + "\n" + " .oneOver {\n" + " overflow: hidden;\n" + " text-overflow: ellipsis;\n" + " white-space: nowrap;\n" + " }\n" + "\n" + " .head{\n" + " height: 48px;\n" + " width: 48px;\n" + " border-radius: 50%;\n" + " overflow: hidden;\n" + " border: solid 1px #E6E6E6;\n" + " position: absolute;\n" + " left: 0;\n" + " top: 0;\n" + " overflow: hidden;\n" + " }\n" + "\n" + " .head img {\n" + " width: 100%;\n" + " height: 100%;\n" + " }\n" + "\n" + " .pro_pic{\n" + " width: 400px;\n" + " height: 400px;\n" + " margin: 0 auto 24px;\n" + " }\n" + "\n" + " .pro_pic_{\n" + " width: 100%;\n" + " height: 100%;\n" + " }\n" + "\n" + " .money{\n" + " font-size: 40px;\n" + " font-weight: bold;\n" + " padding-bottom: 16px;\n" + " }\n" + "\n" + " .name{\n" + " font-size: 28px;\n" + " line-height: 40px;\n" + " font-weight: bold;\n" + " padding-bottom: 34px;\n" + " }\n" + "\n" + " .code{\n" + " height: 175px;\n" + " width: 175px;\n" + " margin: 0 auto 20px;\n" + " border: solid 1px #E6E6E6;\n" + " border-radius: 50%;\n" + " overflow: hidden;\n" + " }\n" + "\n" + " .code_pic{\n" + " height: 175px;\n" + " width: 175px;\n" + " }\n" + "\n" + " .desc{\n" + " font-size: 24px;\n" + " line-height: 34px;\n" + " color: #999;\n" + " }\n" + " \n" + "\n" + "\n" + " \n" + " \n" + " \n" + " \n" + " \n" + " "+userName+",为您安利好物\n" + " \n" + " \n" + " \n" + " \n" + " ¥"+proPrice+"\n" + " "+proName+"\n" + " \n" + " \n" + " \n" + " 识别小程序码,查看商品详情\n" + " \n" + "\n" + ""; //string转为inputstream流 ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(html.getBytes()); File targetFile = ResourceUtils.getFile(ResourceUtils.CLASSPATH_URL_PREFIX+"share1.html"); //inputstream流转为file FileUtils.copyInputStreamToFile(byteArrayInputStream, targetFile); //通过openhtmltopdf工具生成图片 final Java2DRenderer renderer = new Java2DRenderer(targetFile, 740, 1000); final BufferedImage img = renderer.getImage(); final FSImageWriter imageWriter = new FSImageWriter(); imageWriter.setWriteCompressionQuality(1.0f); imageWriter.write(img, "D:\\zhifu\\ccc.jpg");//输出路径 System.out.println("Done with rendering"); } }


【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3